home *** CD-ROM | disk | FTP | other *** search
- .title k11rmz overlayed RMS11 code (3.43)
- .ident /3.43/
- .psect $code
-
- ; Creation: 24-Jan-86 14:06:18 Brian Nelson
- ;
- ; Will the addition of long packet support the root is getting
- ; too large.
- ;
- ; Entry points:
- ;
- ; delete delete a file(s)
- ; rename rename a file(s)
- ; getmcr get mcr/ccl command line, only used ONCE
- ;
- ;
- ; Copyright (C) 1986 Change Software, Inc
-
-
-
-
-
- .if ndf, K11INC
- .ift
- .include /IN:K11MAC.MAC/
- .endc
-
- .library /LB:[1,1]RMSMAC.MLB/
-
-
- .mcall $compare,$fetch ,$parse ,$search,$set ,$store
- .mcall fab$b ,nam$b ,$rename,$erase ,$off ,$testb
-
-
-
- nb$nod = 400 ; Node in file or default string (FNB in NAM)
-
- .enabl gbl
-
- .psect $code ,ro,i,lcl,rel,con
- .psect rmssup ,rw,d,lcl,rel,con
-
-
- .mcall fabof$
- .mcall rabof$
- .mcall xabof$
-
- fabof$ RMS$L
- rabof$ RMS$L
- xabof$ RMS$L
-
-
-
-
- .sbttl rename
-
-
- ; R E N A M E
- ;
- ; input: @r5 old filename address
- ; 2(r5) new filename address
- ; 4(r5) flag, lt 0 don't print the results else print a log
- ;
- ; output: r0 error code, zero if at least one file found
- ; r1 number of files renamed
-
-
-
- .sbttl the real work of rename
- .psect $code
- .enabl lsb
-
- rename::save <r2,r3,r4,r5> ; save temps please
- mov #rnfab1 ,r0 ; point to the old name FAB
- mov #rnfab2 ,r1 ; point to the new name FAB
- mov #rnnam1 ,r2 ; point to the old name's NAMEBLOCK
- mov #rnnam2 ,r3 ; point to the new name's NAMEBLOCK
- tst fu$def ; do we really need a default device?
- beq 1$ ; no
- $store #sydisk,DNA,r0 ; yes. Stuff the default system device
- $store #sylen ,DNS,r0 ; name and length to the source name and
- $store #sydisk,DNA,r1 ; then do the same for the new name. Put
- $store #sylen ,DNS,r1 ; the def device address and length in.
-
- 1$: mov r0 ,r4 ; save the FAB1 pointer now ;RBD01--
- strlen #defdir ; anything in the Kermit default dir?
- tst r0 ; if <> then use it
- beq 5$ ; nothing there to use, use SY:
- $store #defdir ,DNA,r1 ; something was there, stuff it in
- $store r0 ,DNS,r1 ; and the length of the default
- $store #defdir ,DNA,r4 ; something was there, stuff it in
- $store r0 ,DNS,r4 ; and the length of the default
- 5$: mov r4 ,r0 ; restore FAB1 pointer now
- $store #lun.sr ,LCH,r0 ; stuff a logical unit number
- $store #lun.sr ,LCH,r1 ; stuff a logical unit number
- sub #100 ,sp ; allocate an ESA for old name
- $store sp ,ESA,r2 ; and stuff the address in
- $store #100,ESS,r2 ; and the length of it please
- sub #100 ,sp ; next is the resultant string
- $store sp ,RSA,r2 ; buffer for the old filename
- $store #100,RSS,r2 ; and the size of it please
- sub #100 ,sp ; the new filename buffer
- $store sp ,ESA,r3 ; stuff address of the buffer
- $store #100,ESS,r3 ; and the size of it please
- clr -(sp) ; a count of the files done so far
-
- mov #rnfab1 ,r1 ; point to the old name FAB
- mov #rnfab2 ,r2 ; point to the new name FAB
- strlen @r5 ; get the .asciz length of old
- $store @r5 ,FNA,r1 ; store the old filename address
- $store r0 ,FNS,r1 ; stuff the length of the old name
- mov #rnfab1 ,r0 ; point to the old name FAB
- $parse r0 ; parse the old name please
- $compar #0 ,STS,r0 ; did the parse work out ok ?
- blt 90$ ; no, exit
- strlen 2(r5) ; get the length of the new name
- $store 2(r5),FNA,r2 ; stuff the new name into FNS field
- $store r0 ,FNS,r2 ; and the size of it please
-
-
- 10$: mov #rnfab1 ,r0 ; point to the old name FAB
- mov #rnfab2 ,r1 ; point to the new name FAB
- mov #rnnam1 ,r2 ; point to the old name's NAMEBLOCK
- mov #rnnam2 ,r3 ; point to the new name's NAMEBLOCK
- $set #fb$fid,FOP,r0 ; set explicit search please
- $search r0 ; do a directory lookup please
- $compar #0 ,STS,r0 ; did the lookup work ?
- blt 90$ ; oops, it didn't work
- $fetch r4 ,RSA,r2 ; get the resultant address
- $store r4 ,DNA,r1 ; set this as default
- $fetch r4 ,RSL,r2 ; get the resultant length
- $store r4 ,DNS,r1 ; set the default length
- $rename r0,,,r1 ; rename input as output
- $compar #0 ,sts,r0 ; error?
- blt 90$ ; yes, exit please
- inc @sp ; no errors, count that file
- tst 4(r5) ; should we print the results ?
- bmi 10$ ; no
- call 200$ ; yes
- br 10$ ; go back for more please
-
-
- 90$: mov @sp ,r1 ; return # files renamed
- dec (sp)+ ; did we get any work done ?
- bge 100$ ; yes
- $fetch r0 ,STS,r0 ; no, get the error code
- cmp r0 ,#ER$NMF ; no files, was it NO MORE FILES ?
- bne 110$ ; no
- mov #ER$FNF ,r0 ; yes, change it to FILE NOT FOUND
- br 110$ ; and exit
-
- 100$: clr r0 ; success exit, no errors
-
- 110$: add #3*100 ,sp ; pop the buffers
- unsave <r5,r4,r3,r2> ; pop registers now
- return
-
-
- 200$: print #300$
- movb o$rsl(r2),r0
- print o$rsa(r2),r0
- print #310$
- movb o$esl(r3),r0
- print o$esa(r3),r0
- print #320$
- return
-
- .save
- .psect $PDATA ,D
- .enabl lc
- 300$: .asciz /File /
- 310$: .asciz / renamed to /
- 320$: .byte cr,lf,0
- .even
- .restore
- .dsabl lsb
-
-
-
-
- .sbttl delete a file(s)
- .enabl lsb
-
- ; input: @r5 address of filename spec
- ; 2(r5) if eq -1, don't print the results out
- ; 0, print on terminal
- ; >0, write to lun in 2(r5)
- ;
- ; output: r0 RMS error code
- ; r1 number of files renamed
- ;
- ;
- ; internal register usage
- ;
- ; r0 RMS error STS
- ; r1 pointer to the FAB for this operation
- ; r2 pointer to the NAM block for this operation
- ; r3 number of files deleted
- ; r5 pointer to the argument list
-
-
- delete::save <r2,r3,r4> ; save registers we may overwrite
- clr r3 ; files_deleted := 0
- mov #rnfab1 ,r1 ; point to the fab we use ;RBD01--
- tst fu$def ; do we need a default device name?
- beq 1$ ; no
- $store #sydisk ,DNA,r1 ; yes, please stuff the correct defs
- $store #sylen ,DNS,r1 ; simple
- 1$: strlen #defdir ; anything in the Kermit default dir?
- tst r0 ; if <> then use it
- beq 5$ ; nothing there to use, use SY:
- $store #defdir ,DNA,r1 ; something was there, stuff it in
- $store r0 ,DNS,r1 ; and the length of the default
- 5$: $store #lun.sr,LCH,r1 ; a channel number to use for delete
- $off #fb$fid,FOP,r1 ; we want an implicit $SEARCH
- mov #rnnam1 ,r2 ; also point to the NAME block
- sub #200 ,sp ; allocate result name string
- $store sp ,RSA,r2 ; set up the pointer to name string
- $store #200,RSS,r2 ; and set the size of the string
- sub #200 ,sp ; allocate result expanded name string
- $store sp ,ESA,r2 ; set up the pointer to expanded name
- $store #200,ESS,r2 ; and set the size of the string
- $store #ER$FNM ,STS,r1 ; preset a bad filename error
- strlen @r5 ; get the length of the filename
- tst r0 ; anything left at all ?
- beq 90$ ; no, fake a bad filename please
- $store r0 ,FNS,r1 ; stuff the filename size in please
- $store @r5 ,FNA,r1 ; stuff the filename address into FAB
- $parse r1 ; try to parse the filename now
- $compar #0 ,STS,r1 ; did the parse of the name work ?
- blt 90$ ; no, exit and return STS in r0
- 10$: $erase r1 ; parse worked, try to delete it
- $compar #0 ,STS,r1 ; did the erase work out ok ?
- blt 90$ ; no
- inc r3 ; count the file as being deleted
- call 200$ ; do any echoing now please
- br 10$ ; next please
-
- 90$: $fetch r0 ,STS,r1 ; get the error code out please
- mov r3 ,r1 ; return the # of files deleted
- cmp r0 ,#ER$NMF ; error is no more files ?
- bne 95$ ; no
- mov #ER$FNF ,r0 ; yes, make it into file not found
- tst r3 ; ever delete any files at all ?
- beq 100$ ; no, leave the error as FNF
- clr r0 ; yes, at least one file deleted
- br 100$ ; bye
- 95$: tst r0 ; error code > 0
- bmi 100$ ; no
- clr r0 ; yes, make the error STS zero then
- 100$: add #200*2 ,sp ; pop local buffers please
- unsave <r4,r3,r2> ; pop temps and exit
- return
-
-
-
- .sbttl printing routines for DELETE
-
-
-
- 180$: tst 2(r5) ; print out an initial header
- beq 190$ ; yes, but to the terminal
- bmi 195$ ; not at all, please
- strlen #300$ ; no, put it out to disk please
- calls putrec ,<#300$,r0,2(r5)>; dump the record to disk
- br 195$ ; and exit
- 190$: print #300$ ; dump the header to the terminal
- 195$: return ; bye
-
-
- 200$: cmp r3 ,#1 ; deleted anything as of yet ?
- bne 210$ ; yes
- call 180$ ; no, dump a header out please
- 210$: clr r0 ; get set to get the string length
- bisb o$rsl(r2),r0 ; get the string length
- beq 250$ ; nothing was there to print ?????
- tst 2(r5) ; echo files deleted to terminal ?
- beq 240$ ; yes, echo to tt:
- bmi 250$ ; no, don't echo at all
- calls putrec ,<o$rsa(r2),r0,2(r5)>; echo to a file that's open
- br 250$
- 240$: print o$rsa(r2),r0 ; print the filename out to tt:
- print #310$
- 250$: return
-
- .save
- .psect $PDATA ,D
- 300$: .asciz <cr><lf>/Files deleted:/<cr><lf>
- 310$: .byte cr,lf,0
- .even
- .restore
- .dsabl lsb
-
-
- .sbttl get mcr/ccl (rsts) command line and remove task name
-
- .mcall gmcr$ ,dir$
- .psect mcrbuf ,rw,d,lcl,rel,con
-
- gmcr: gmcr$
-
- .psect $code
-
- ; G M C R
- ;
- ; output: @r5 the command line less the task name, .asciz
- ; r0 the length of whats left
- ; NOTE: blank insertion ----+ +SSH
- ; V +SSH
- ; @takefil will parse to @ takefile... +SSH
- ; which allows KER @TAKEFIL to work. +SSH
-
- getmcr::save <r1,r2,r3> ; just for kicks, save these /SSH
- clr r3 ; clear the "space flag" +SSH
- mov @r5 ,r2 ; point to the resultant command
- clrb @r2 ; insure .asciz
- dir$ #gmcr ; get the command line
- movb @#$dsw ,r0 ; get the length of it
- ble 90$ ; nothing
- mov #gmcr+g.mcrb,r1
- 10$: cmpb @r1 ,#40 ; look for the space delimiting
- beq 20$ ; the task name from the command
- inc r1 ; line. did not find it, keep looking
- sob r0 ,10$ ; keep trying
- br 90$ ; nothing
- 20$: inc r1 ; found the space, skip past it
- dec r0 ; whats left of it
- ble 90$ ; nothing
- clr -(sp) ; a length counter today
- 30$: tst r3 ; is the space flag set ? +SSH
- bne 32$ ; yes, go check for " " char +SSH
- cmpb (r1),#'@ ; no, check for "@" char +SSH
- bne 33$ ; no @ char, just continue +SSH
- inc r3 ; yes an @, so set space flag +SSH
- br 33$ ; and continue with copy +SSH
- 32$: clr r3 ; clear the space flag +SSH
- cmpb (r1),#40 ; char after @ is a space ? +SSH
- beq 33$ ; yes, continue with copy +SSH
- movb #40 ,(r2)+ ; no, insert a space char +SSH
- inc @sp ; increment count +SSH
- 33$: movb (r1)+ ,(r2)+ ; copy next char to buffer
- inc @sp ; length := succ( length )
- sob r0 ,30$ ; next byte please
- mov (sp)+ ,r0 ; return the command length
- mov @r5 ,r2 ; restore pointer to the returned string
- calls cvt$$ ,<r2,r0,#50> ; remove leading spaces, upper case it
- add r0 ,r2 ; insure .asciz
- clrb @r2 ; simple
- br 100$ ; bye
-
- 90$: clr r0 ; nothing
- 100$: unsave <r3,r2,r1> ; pop used registers and exit
- return
-
- .end
-